/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.modelo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Juan Pablo
 */
@Entity
@Table(name = "USUARIO")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "UsuarioP.findAll", query = "SELECT u FROM UsuarioP u"),
    @NamedQuery(name = "UsuarioP.findByPrivacidad", query = "SELECT u FROM UsuarioP u WHERE u.privacidad = :privacidad"),
    @NamedQuery(name = "UsuarioP.findByFoto", query = "SELECT u FROM UsuarioP u WHERE u.foto = :foto"),
    @NamedQuery(name = "UsuarioP.findByNombre", query = "SELECT u FROM UsuarioP u WHERE u.nombre = :nombre"),
    @NamedQuery(name = "UsuarioP.findByApellido", query = "SELECT u FROM UsuarioP u WHERE u.apellido = :apellido"),
    @NamedQuery(name = "UsuarioP.findByDescripcion", query = "SELECT u FROM UsuarioP u WHERE u.descripcion = :descripcion"),
    @NamedQuery(name = "UsuarioP.findByFechaRegistro", query = "SELECT u FROM UsuarioP u WHERE u.fechaRegistro = :fechaRegistro"),
    @NamedQuery(name = "UsuarioP.findByCorreoElectronico", query = "SELECT u FROM UsuarioP u WHERE u.correoElectronico = :correoElectronico"),
    @NamedQuery(name = "UsuarioP.findByFechaNacimiento", query = "SELECT u FROM UsuarioP u WHERE u.fechaNacimiento = :fechaNacimiento"),
    @NamedQuery(name = "UsuarioP.findByNumeroDocumento", query = "SELECT u FROM UsuarioP u WHERE u.numeroDocumento = :numeroDocumento"),
    @NamedQuery(name = "UsuarioP.findByDireccion", query = "SELECT u FROM UsuarioP u WHERE u.direccion = :direccion"),
    @NamedQuery(name = "UsuarioP.findByCelular", query = "SELECT u FROM UsuarioP u WHERE u.celular = :celular"),
    @NamedQuery(name = "UsuarioP.findBySexo", query = "SELECT u FROM UsuarioP u WHERE u.sexo = :sexo"),
    @NamedQuery(name = "UsuarioP.findByContrasena", query = "SELECT u FROM UsuarioP u WHERE u.contrasena = :contrasena"),
    @NamedQuery(name = "UsuarioP.findByRol", query = "SELECT u FROM UsuarioP u WHERE u.rol = :rol"),
    @NamedQuery(name = "UsuarioP.findByIdUsuario", query = "SELECT u FROM UsuarioP u WHERE u.idUsuario = :idUsuario")})
public class UsuarioP implements Serializable {
    private static final long serialVersionUID = 1L;
    @Basic(optional = false)
    @NotNull
    @Column(name = "PRIVACIDAD")
    private char privacidad;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 50)
    @Column(name = "FOTO")
    private String foto;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "NOMBRE")
    private String nombre;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "APELLIDO")
    private String apellido;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 50)
    @Column(name = "DESCRIPCION")
    private String descripcion;
    @Basic(optional = false)
    @NotNull
    @Column(name = "FECHA_REGISTRO")
    @Temporal(TemporalType.DATE)
    private Date fechaRegistro;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 30)
    @Column(name = "CORREO_ELECTRONICO")
    private String correoElectronico;
    @Basic(optional = false)
    @NotNull
    @Column(name = "FECHA_NACIMIENTO")
    @Temporal(TemporalType.DATE)
    private Date fechaNacimiento;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "NUMERO_DOCUMENTO")
    private String numeroDocumento;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 50)
    @Column(name = "DIRECCION")
    private String direccion;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "CELULAR")
    private String celular;
    @Basic(optional = false)
    @NotNull
    @Column(name = "SEXO")
    private char sexo;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "CONTRASENA")
    private String contrasena;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "ROL")
    private String rol;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "ID_USUARIO")
    private BigDecimal idUsuario;
    @JoinColumn(name = "ID_CIUDAD", referencedColumnName = "ID_CIUDAD")
    @ManyToOne(optional = false)
    private CiudadP idCiudad;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idUsuario")
    private Collection<InmuebleP> inmueblePCollection;

    public UsuarioP() {
    }

    public UsuarioP(BigDecimal idUsuario) {
        this.idUsuario = idUsuario;
    }

    public UsuarioP(BigDecimal idUsuario, char privacidad, String foto, String nombre, String apellido, String descripcion, Date fechaRegistro, String correoElectronico, Date fechaNacimiento, String numeroDocumento, String direccion, String celular, char sexo, String contrasena, String rol) {
        this.idUsuario = idUsuario;
        this.privacidad = privacidad;
        this.foto = foto;
        this.nombre = nombre;
        this.apellido = apellido;
        this.descripcion = descripcion;
        this.fechaRegistro = fechaRegistro;
        this.correoElectronico = correoElectronico;
        this.fechaNacimiento = fechaNacimiento;
        this.numeroDocumento = numeroDocumento;
        this.direccion = direccion;
        this.celular = celular;
        this.sexo = sexo;
        this.contrasena = contrasena;
        this.rol = rol;
    }

    public char getPrivacidad() {
        return privacidad;
    }

    public void setPrivacidad(char privacidad) {
        this.privacidad = privacidad;
    }

    public String getFoto() {
        return foto;
    }

    public void setFoto(String foto) {
        this.foto = foto;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Date getFechaRegistro() {
        return fechaRegistro;
    }

    public void setFechaRegistro(Date fechaRegistro) {
        this.fechaRegistro = fechaRegistro;
    }

    public String getCorreoElectronico() {
        return correoElectronico;
    }

    public void setCorreoElectronico(String correoElectronico) {
        this.correoElectronico = correoElectronico;
    }

    public Date getFechaNacimiento() {
        return fechaNacimiento;
    }

    public void setFechaNacimiento(Date fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public String getNumeroDocumento() {
        return numeroDocumento;
    }

    public void setNumeroDocumento(String numeroDocumento) {
        this.numeroDocumento = numeroDocumento;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }

    public char getSexo() {
        return sexo;
    }

    public void setSexo(char sexo) {
        this.sexo = sexo;
    }

    public String getContrasena() {
        return contrasena;
    }

    public void setContrasena(String contrasena) {
        this.contrasena = contrasena;
    }

    public String getRol() {
        return rol;
    }

    public void setRol(String rol) {
        this.rol = rol;
    }

    public BigDecimal getIdUsuario() {
        return idUsuario;
    }

    public void setIdUsuario(BigDecimal idUsuario) {
        this.idUsuario = idUsuario;
    }

    public CiudadP getIdCiudad() {
        return idCiudad;
    }

    public void setIdCiudad(CiudadP idCiudad) {
        this.idCiudad = idCiudad;
    }

    @XmlTransient
    public Collection<InmuebleP> getInmueblePCollection() {
        return inmueblePCollection;
    }

    public void setInmueblePCollection(Collection<InmuebleP> inmueblePCollection) {
        this.inmueblePCollection = inmueblePCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idUsuario != null ? idUsuario.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof UsuarioP)) {
            return false;
        }
        UsuarioP other = (UsuarioP) object;
        if ((this.idUsuario == null && other.idUsuario != null) || (this.idUsuario != null && !this.idUsuario.equals(other.idUsuario))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.modelo.UsuarioP[ idUsuario=" + idUsuario + " ]";
    }
    
}
